Applications can communicate with each other using Transmission Control Protocol (TCP), e.g., TCP/IP (Internet Protocol) connections. For example, a remote application node (on which a source application sending a message packet is executing) can send a message packet to a remote network node, which sends the message to a local network node, which forwards the message packet to a local application node (on which the destination application is executing). The network nodes establish a connection to be used to communicate messages back and forth between application nodes. Each network node manages the state of its own “socket”, i.e., endpoint, of the connection.
At times, it may be desirable to transfer a socket state to a different network node. For example, an application may be migrated, e.g., to a more capable or compatible host system, to rebalance workloads among host systems, to free a host system for maintenance or repair, or in response to a failure of some or all of the host system. “Migrating” herein includes fail-overs, which may involve making a backup copy of a workload or TCP connection socket during normal operation so that it is available if a failure precludes access to the original. To maintain uninterrupted operation, e.g., for mission-critical applications, it may be desirable to migrate an application's TCP socket(s) along with the application. There are also situations that call for transferring a socket but not an application, for example, to rebalance connection-based workloads among application instances.